#include "houqin.h"
#include <string.h>
#include <stdlib.h>

Houqin hou_qin[HOUQIN_MAX];
size_t g_hou_qin_cnt;

int query_hou_qin_id(const char* id)
{
	for(int i=0; i<g_hou_qin_cnt; i++)
	{
		if(0 == strcmp(hou_qin[i].id,id))
			return i;
	}
	return -1;
}

void add_hou_qin(void)
{
	// 判断后期人员是否已满
	if(g_hou_qin_cnt >= HOUQIN_MAX)
	{
		print_sec("后勤数量已满，无法添加！",0.75);
		return;
	}

	// 输入id
	printf("请输入ID账号(最长9位)：");
	get_str(hou_qin[g_hou_qin_cnt].id,sizeof(hou_qin[g_hou_qin_cnt].id));
	if(0 == strlen(hou_qin[g_hou_qin_cnt].id) || 10 <= strlen(hou_qin[g_hou_qin_cnt].id) || strlen(hou_qin[g_hou_qin_cnt].id) != strspn(hou_qin[g_hou_qin_cnt].id,STR_DIGIT_ALPHABET))
	{
		print_sec("ID账号格式有误！添加失败！",0.75);
		return;
	}
	// 检查id是否被占用
	if(-1 < query_hou_qin_id(hou_qin[g_hou_qin_cnt].id))
	{
		print_sec("该账号已被占用，添加失败！",0.75);
		return;
	}

	// 输入密码
	printf("请输入密码(最大长度10位)：");
	char password[12];
	get_str(password,sizeof(password));
	if(0 == strlen(password) || strlen(password) != strspn(password,STR_DIGIT_ALPHABET))
	{
		print_sec("错误！密码为空或格式不正确！",0.75);
		return;
	}

	// 确认密码
	char password_again[12];
	printf("请再次输入密码:");
	get_str(password_again,sizeof(password_again));
	// 检查两次密码是否一致
	if(0 != strcmp(password,password_again))
	{
		print_sec("密码不一致！添加失败！",0.75);
		return;
	}
	
	// 输入姓名
	printf("请输入姓名:");
	get_str(hou_qin[g_hou_qin_cnt].name,sizeof(hou_qin[g_hou_qin_cnt].name));
	if(0 == strlen(hou_qin[g_hou_qin_cnt].name))	
	{
		print_sec("错误！姓名为空！",0.75);
		return;
	}

	strcpy(hou_qin[g_hou_qin_cnt].password,password);
	g_hou_qin_cnt++;
	print_sec("添加成功！",0.75);
	return;
}

void delete_hou_qin(void)
{
	if(0 == g_hou_qin_cnt)
	{
		print_sec("无后勤信息！",0.75);
		return;
	}

	// 输入id
	char id[11];
	printf("请输入要删除的ID:");
	get_str(id,sizeof(id));
	// 检查id是否存在
	int cnt = query_hou_qin_id(id);
	if(-1 == cnt)
	{
		print_sec("账号不存在！",0.75);
		return;
	}

	if(yes_or_no())
	{
		// 把最后一个后勤数据移动到要删除的后勤数据位置进行覆盖
		hou_qin[cnt] = hou_qin[g_hou_qin_cnt-1];
		// 后勤数量减1
		g_hou_qin_cnt--;
		print_sec("删除成功！",0.75);
		return;
	}
	else
	{
		print_sec("删除操作已取消！",0.75);
		return;
	}
}

void update_hou_qin(void)
{	
	if(0 == g_hou_qin_cnt)
	{
		print_sec("无后勤信息！",0.75);
		return;
	}

	// 输入id
	char id[11];
	printf("请输入要修改的ID:");
	get_str(id,sizeof(id));
	// 检查id是否存在
	int cnt = query_hou_qin_id(id);
	if(-1 == cnt)
	{
		print_sec("账号不存在！",0.75);
		return;
	}

	// 输入密码
	char password[15];
	printf("请输入新密码:");
	get_str(password,sizeof(password));
	if(0 == strlen(password))	
	{
		print_sec("错误！密码为空！",0.75);
		return;
	}
	
	// 输入姓名
	char name[20];
	printf("请输入姓名：");
	get_str(name,sizeof(name));
	if(0 == strlen(name))	
	{
		print_sec("错误！姓名为空！",0.75);
		return;
	}

	strcpy(hou_qin[cnt].password,password);
	strcpy(hou_qin[cnt].name,name);
	print_sec("信息修改成功！",0.75);
	return;
}

void find_all_hou_qin(void)
{
	printf("账号\t\t密码\t\t姓名\n");
	for(int i=0; i<g_hou_qin_cnt; i++)
	{
		printf("%-16s%-16s%s\n",hou_qin[i].id,hou_qin[i].password,hou_qin[i].name);
	}
	anykey_continue();
	return;
}

void menu_hou_qin(void)
{
	for(;;)
	{
		system("clear");
		puts("*****后勤信息管理*****");
		puts("1、添加后勤");
		puts("2、删除后勤");
		puts("3、修改后勤");
		puts("4、遍历后勤");
		puts("5、返回");
		switch(get_cmd('1','5'))
		{
			case '1': add_hou_qin(); break;
			case '2': delete_hou_qin(); break;
			case '3': update_hou_qin(); break;
			case '4': find_all_hou_qin(); break;
			case '5':
					return;
		}
	}
}
